[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer] procedimiento almacenado
Hola a todos soy nuevo, pero no se si me podria ayudar me sale este error cuando intento llamar un metodo de mi clase que este se conecta a una base de datos por medio de un Procedimiento alamacenado.
el codigo es este
public boolean BuscarIdProducto(String vidproducto){
boolean res=false;
try{
DBManager dbm = new DBManager();
Connection con = dbm.getConnection();
if ( con == null )
throw new NullPointerException( dbm.geterror() );
CallableStatement st = con.prepareCall("{CALL spProducto_T(?)}");
st.registerOutParameter(1,Types.CHAR);
st.setString(1,vidproducto);
ResultSet rs = st.executeQuery();
if ( rs.next() ){
this.idProducto = rs.getString("idproducto");
this.idClasifica = rs.getString("idclasifica");
this.nombre = rs.getString("nombre");
this.precio = rs.getDouble("precio");
this.um = rs.getString("um");
this.tipo = rs.getString("tipo");
res=true;
}
rs.close();
st.close();
dbm.closeConnection( con );
}catch(Exception e){e.getMessage();res=false;System.out.println(e.getMessage());}
return res;
}
el error :
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]El parámetro formal '@idproducto' se definió con OUTPUT, pero el parámetro real no se ha declarado con OUTPUT.
el codigo es este
public boolean BuscarIdProducto(String vidproducto){
boolean res=false;
try{
DBManager dbm = new DBManager();
Connection con = dbm.getConnection();
if ( con == null )
throw new NullPointerException( dbm.geterror() );
CallableStatement st = con.prepareCall("{CALL spProducto_T(?)}");
st.registerOutParameter(1,Types.CHAR);
st.setString(1,vidproducto);
ResultSet rs = st.executeQuery();
if ( rs.next() ){
this.idProducto = rs.getString("idproducto");
this.idClasifica = rs.getString("idclasifica");
this.nombre = rs.getString("nombre");
this.precio = rs.getDouble("precio");
this.um = rs.getString("um");
this.tipo = rs.getString("tipo");
res=true;
}
rs.close();
st.close();
dbm.closeConnection( con );
}catch(Exception e){e.getMessage();res=false;System.out.println(e.getMessage());}
return res;
}
el error :
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]El parámetro formal '@idproducto' se definió con OUTPUT, pero el parámetro real no se ha declarado con OUTPUT.
Según el API de CallableStatement si llamas a un procedimiento almacenado que devuelva un parámetro OUT se le deverá de llamar asÃ:
{?= call spProducto_T(?)} /mira los interrogantes
El primer ? es de tipo OUT y se define como lo has hecho pero el segundo ? será de tipo IN, OUT o ambos, pero con el indice 2 en tu caso:
st.setString(2, vidproducto); /cuidao con los Ãndices
El Api de CallableStatement:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/CallableStatement.html
Espero te sirva de ayuda,
Un saludo.
{?= call spProducto_T(?)} /mira los interrogantes
El primer ? es de tipo OUT y se define como lo has hecho pero el segundo ? será de tipo IN, OUT o ambos, pero con el indice 2 en tu caso:
st.setString(2, vidproducto); /cuidao con los Ãndices
El Api de CallableStatement:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/CallableStatement.html
Espero te sirva de ayuda,
Un saludo.
